{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "18d6258e87f9e05b",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "学习目标\n",
    "- 应用add等实现数据间的加、减法运算\n",
    "- 应用逻辑运算符号实现数据的逻辑筛选\n",
    "- 应用isin, query实现数据的筛选\n",
    "- 使用describe完成综合统计\n",
    "- 使用max, min, mean, std完成统计计算\n",
    "- 使用idxmin、idxmax完成最大值最小值的索引\n",
    "- 使用cumsum等实现累计分析\n",
    "- 应用apply函数实现数据的自定义处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e3bda85e1d1fd43d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:13:21.450774400Z",
     "start_time": "2024-02-22T07:13:21.431756800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-26</th>\n",
       "      <td>22.80</td>\n",
       "      <td>23.78</td>\n",
       "      <td>23.53</td>\n",
       "      <td>22.80</td>\n",
       "      <td>60985.11</td>\n",
       "      <td>0.69</td>\n",
       "      <td>3.02</td>\n",
       "      <td>1.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-23</th>\n",
       "      <td>22.88</td>\n",
       "      <td>23.37</td>\n",
       "      <td>22.82</td>\n",
       "      <td>22.71</td>\n",
       "      <td>52914.01</td>\n",
       "      <td>0.54</td>\n",
       "      <td>2.42</td>\n",
       "      <td>1.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-22</th>\n",
       "      <td>22.25</td>\n",
       "      <td>22.76</td>\n",
       "      <td>22.28</td>\n",
       "      <td>22.02</td>\n",
       "      <td>36105.01</td>\n",
       "      <td>0.36</td>\n",
       "      <td>1.64</td>\n",
       "      <td>0.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-14</th>\n",
       "      <td>21.49</td>\n",
       "      <td>21.99</td>\n",
       "      <td>21.92</td>\n",
       "      <td>21.48</td>\n",
       "      <td>23331.04</td>\n",
       "      <td>0.44</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-06</th>\n",
       "      <td>13.17</td>\n",
       "      <td>14.48</td>\n",
       "      <td>14.28</td>\n",
       "      <td>13.13</td>\n",
       "      <td>179831.72</td>\n",
       "      <td>1.12</td>\n",
       "      <td>8.51</td>\n",
       "      <td>6.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-05</th>\n",
       "      <td>12.88</td>\n",
       "      <td>13.45</td>\n",
       "      <td>13.16</td>\n",
       "      <td>12.87</td>\n",
       "      <td>93180.39</td>\n",
       "      <td>0.26</td>\n",
       "      <td>2.02</td>\n",
       "      <td>3.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-04</th>\n",
       "      <td>12.80</td>\n",
       "      <td>12.92</td>\n",
       "      <td>12.90</td>\n",
       "      <td>12.61</td>\n",
       "      <td>67075.44</td>\n",
       "      <td>0.20</td>\n",
       "      <td>1.57</td>\n",
       "      <td>2.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-03</th>\n",
       "      <td>12.52</td>\n",
       "      <td>13.06</td>\n",
       "      <td>12.70</td>\n",
       "      <td>12.52</td>\n",
       "      <td>139071.61</td>\n",
       "      <td>0.18</td>\n",
       "      <td>1.44</td>\n",
       "      <td>4.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-02</th>\n",
       "      <td>12.25</td>\n",
       "      <td>12.67</td>\n",
       "      <td>12.52</td>\n",
       "      <td>12.20</td>\n",
       "      <td>96291.73</td>\n",
       "      <td>0.32</td>\n",
       "      <td>2.62</td>\n",
       "      <td>3.30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>643 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low     volume  price_change  p_change  \\\n",
       "2018-02-27  23.53  25.88  24.16  23.53   95578.03          0.63      2.68   \n",
       "2018-02-26  22.80  23.78  23.53  22.80   60985.11          0.69      3.02   \n",
       "2018-02-23  22.88  23.37  22.82  22.71   52914.01          0.54      2.42   \n",
       "2018-02-22  22.25  22.76  22.28  22.02   36105.01          0.36      1.64   \n",
       "2018-02-14  21.49  21.99  21.92  21.48   23331.04          0.44      2.05   \n",
       "...           ...    ...    ...    ...        ...           ...       ...   \n",
       "2015-03-06  13.17  14.48  14.28  13.13  179831.72          1.12      8.51   \n",
       "2015-03-05  12.88  13.45  13.16  12.87   93180.39          0.26      2.02   \n",
       "2015-03-04  12.80  12.92  12.90  12.61   67075.44          0.20      1.57   \n",
       "2015-03-03  12.52  13.06  12.70  12.52  139071.61          0.18      1.44   \n",
       "2015-03-02  12.25  12.67  12.52  12.20   96291.73          0.32      2.62   \n",
       "\n",
       "            turnover  \n",
       "2018-02-27      2.39  \n",
       "2018-02-26      1.53  \n",
       "2018-02-23      1.32  \n",
       "2018-02-22      0.90  \n",
       "2018-02-14      0.58  \n",
       "...              ...  \n",
       "2015-03-06      6.16  \n",
       "2015-03-05      3.19  \n",
       "2015-03-04      2.30  \n",
       "2015-03-03      4.76  \n",
       "2015-03-02      3.30  \n",
       "\n",
       "[643 rows x 8 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据准备\n",
    "import pandas as pd\n",
    "\n",
    "# 读取文件\n",
    "data = pd.read_csv(\"stock_day.csv\")\n",
    "\n",
    "# 删除一些列，让数据更简单些，再去做后面的操作\n",
    "data = data.drop([\"ma5\", \"ma10\", \"ma20\", \"v_ma5\", \"v_ma10\", \"v_ma20\"], axis=1)\n",
    "data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4544842c8887091",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 1 算术运算\n",
    "- add(other)\n",
    "比如进行数学运算加上具体的一个数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8a331204d3fede93",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:13:21.478447100Z",
     "start_time": "2024-02-22T07:13:21.454142800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2018-02-27    24.53\n",
       "2018-02-26    23.80\n",
       "2018-02-23    23.88\n",
       "2018-02-22    23.25\n",
       "2018-02-14    22.49\n",
       "              ...  \n",
       "2015-03-06    14.17\n",
       "2015-03-05    13.88\n",
       "2015-03-04    13.80\n",
       "2015-03-03    13.52\n",
       "2015-03-02    13.25\n",
       "Name: open, Length: 643, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['open'].add(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e13d1af111516e5",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "- sub(other)'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "efd2e8525e3cd2a2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:14:22.114177Z",
     "start_time": "2024-02-22T07:14:22.108466700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2018-02-27    22.53\n",
       "2018-02-26    21.80\n",
       "2018-02-23    21.88\n",
       "2018-02-22    21.25\n",
       "2018-02-14    20.49\n",
       "              ...  \n",
       "2015-03-06    12.17\n",
       "2015-03-05    11.88\n",
       "2015-03-04    11.80\n",
       "2015-03-03    11.52\n",
       "2015-03-02    11.25\n",
       "Name: open, Length: 643, dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['open'].sub(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45ebe643316d60df",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 2 逻辑运算\n",
    "## 2.1 逻辑运算符号\n",
    "- 例如筛选data[\"open\"] > 23的日期数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "de1e548bb1c41b47",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:15:03.459463600Z",
     "start_time": "2024-02-22T07:15:03.454763800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2018-02-27     True\n",
       "2018-02-26    False\n",
       "2018-02-23    False\n",
       "2018-02-22    False\n",
       "2018-02-14    False\n",
       "              ...  \n",
       "2015-03-06    False\n",
       "2015-03-05    False\n",
       "2015-03-04    False\n",
       "2015-03-03    False\n",
       "2015-03-02    False\n",
       "Name: open, Length: 643, dtype: bool"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[\"open\"] > 23"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "abec783de4d1371f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:15:10.782965500Z",
     "start_time": "2024-02-22T07:15:10.771179800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-01</th>\n",
       "      <td>23.71</td>\n",
       "      <td>23.86</td>\n",
       "      <td>22.42</td>\n",
       "      <td>22.22</td>\n",
       "      <td>66414.64</td>\n",
       "      <td>-1.30</td>\n",
       "      <td>-5.48</td>\n",
       "      <td>1.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-31</th>\n",
       "      <td>23.85</td>\n",
       "      <td>23.98</td>\n",
       "      <td>23.72</td>\n",
       "      <td>23.31</td>\n",
       "      <td>49155.02</td>\n",
       "      <td>-0.11</td>\n",
       "      <td>-0.46</td>\n",
       "      <td>1.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-30</th>\n",
       "      <td>23.71</td>\n",
       "      <td>24.08</td>\n",
       "      <td>23.83</td>\n",
       "      <td>23.70</td>\n",
       "      <td>32420.43</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.21</td>\n",
       "      <td>0.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-29</th>\n",
       "      <td>24.40</td>\n",
       "      <td>24.63</td>\n",
       "      <td>23.77</td>\n",
       "      <td>23.72</td>\n",
       "      <td>65469.81</td>\n",
       "      <td>-0.73</td>\n",
       "      <td>-2.98</td>\n",
       "      <td>1.64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low    volume  price_change  p_change  \\\n",
       "2018-02-27  23.53  25.88  24.16  23.53  95578.03          0.63      2.68   \n",
       "2018-02-01  23.71  23.86  22.42  22.22  66414.64         -1.30     -5.48   \n",
       "2018-01-31  23.85  23.98  23.72  23.31  49155.02         -0.11     -0.46   \n",
       "2018-01-30  23.71  24.08  23.83  23.70  32420.43          0.05      0.21   \n",
       "2018-01-29  24.40  24.63  23.77  23.72  65469.81         -0.73     -2.98   \n",
       "\n",
       "            turnover  \n",
       "2018-02-27      2.39  \n",
       "2018-02-01      1.66  \n",
       "2018-01-31      1.23  \n",
       "2018-01-30      0.81  \n",
       "2018-01-29      1.64  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 逻辑判断的结果可以作为筛选的依据\n",
    "data[data[\"open\"] > 23].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c32f3415d595e3f",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "- 完成多个逻辑判断，"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f5d4a6ded56caaae",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:15:35.889880400Z",
     "start_time": "2024-02-22T07:15:35.881893400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-01</th>\n",
       "      <td>23.71</td>\n",
       "      <td>23.86</td>\n",
       "      <td>22.42</td>\n",
       "      <td>22.22</td>\n",
       "      <td>66414.64</td>\n",
       "      <td>-1.30</td>\n",
       "      <td>-5.48</td>\n",
       "      <td>1.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-31</th>\n",
       "      <td>23.85</td>\n",
       "      <td>23.98</td>\n",
       "      <td>23.72</td>\n",
       "      <td>23.31</td>\n",
       "      <td>49155.02</td>\n",
       "      <td>-0.11</td>\n",
       "      <td>-0.46</td>\n",
       "      <td>1.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-30</th>\n",
       "      <td>23.71</td>\n",
       "      <td>24.08</td>\n",
       "      <td>23.83</td>\n",
       "      <td>23.70</td>\n",
       "      <td>32420.43</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.21</td>\n",
       "      <td>0.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-16</th>\n",
       "      <td>23.40</td>\n",
       "      <td>24.60</td>\n",
       "      <td>24.40</td>\n",
       "      <td>23.30</td>\n",
       "      <td>101295.42</td>\n",
       "      <td>0.96</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low     volume  price_change  p_change  \\\n",
       "2018-02-27  23.53  25.88  24.16  23.53   95578.03          0.63      2.68   \n",
       "2018-02-01  23.71  23.86  22.42  22.22   66414.64         -1.30     -5.48   \n",
       "2018-01-31  23.85  23.98  23.72  23.31   49155.02         -0.11     -0.46   \n",
       "2018-01-30  23.71  24.08  23.83  23.70   32420.43          0.05      0.21   \n",
       "2018-01-16  23.40  24.60  24.40  23.30  101295.42          0.96      4.10   \n",
       "\n",
       "            turnover  \n",
       "2018-02-27      2.39  \n",
       "2018-02-01      1.66  \n",
       "2018-01-31      1.23  \n",
       "2018-01-30      0.81  \n",
       "2018-01-16      2.54  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[(data[\"open\"] > 23) & (data[\"open\"] < 24)].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "367add316bc26769",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 2.2 逻辑运算函数\n",
    "- query(expr)\n",
    "```\n",
    "参数：\n",
    "expr:查询字符串\n",
    "```\n",
    "通过query使得刚才的过程更加方便简单"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "638687fe38bc613d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:16:43.525113600Z",
     "start_time": "2024-02-22T07:16:43.516054500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-01</th>\n",
       "      <td>23.71</td>\n",
       "      <td>23.86</td>\n",
       "      <td>22.42</td>\n",
       "      <td>22.22</td>\n",
       "      <td>66414.64</td>\n",
       "      <td>-1.30</td>\n",
       "      <td>-5.48</td>\n",
       "      <td>1.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-31</th>\n",
       "      <td>23.85</td>\n",
       "      <td>23.98</td>\n",
       "      <td>23.72</td>\n",
       "      <td>23.31</td>\n",
       "      <td>49155.02</td>\n",
       "      <td>-0.11</td>\n",
       "      <td>-0.46</td>\n",
       "      <td>1.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-30</th>\n",
       "      <td>23.71</td>\n",
       "      <td>24.08</td>\n",
       "      <td>23.83</td>\n",
       "      <td>23.70</td>\n",
       "      <td>32420.43</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.21</td>\n",
       "      <td>0.81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-16</th>\n",
       "      <td>23.40</td>\n",
       "      <td>24.60</td>\n",
       "      <td>24.40</td>\n",
       "      <td>23.30</td>\n",
       "      <td>101295.42</td>\n",
       "      <td>0.96</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low     volume  price_change  p_change  \\\n",
       "2018-02-27  23.53  25.88  24.16  23.53   95578.03          0.63      2.68   \n",
       "2018-02-01  23.71  23.86  22.42  22.22   66414.64         -1.30     -5.48   \n",
       "2018-01-31  23.85  23.98  23.72  23.31   49155.02         -0.11     -0.46   \n",
       "2018-01-30  23.71  24.08  23.83  23.70   32420.43          0.05      0.21   \n",
       "2018-01-16  23.40  24.60  24.40  23.30  101295.42          0.96      4.10   \n",
       "\n",
       "            turnover  \n",
       "2018-02-27      2.39  \n",
       "2018-02-01      1.66  \n",
       "2018-01-31      1.23  \n",
       "2018-01-30      0.81  \n",
       "2018-01-16      2.54  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.query(\"open<24 & open>23\").head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b7640e63d78a932",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "- isin(values)\n",
    "例如判断'open'是否为23.53和23.85"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b5cbfe32224917f2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:17:26.495043300Z",
     "start_time": "2024-02-22T07:17:26.483987700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-31</th>\n",
       "      <td>23.85</td>\n",
       "      <td>23.98</td>\n",
       "      <td>23.72</td>\n",
       "      <td>23.31</td>\n",
       "      <td>49155.02</td>\n",
       "      <td>-0.11</td>\n",
       "      <td>-0.46</td>\n",
       "      <td>1.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-07-26</th>\n",
       "      <td>23.53</td>\n",
       "      <td>23.92</td>\n",
       "      <td>23.40</td>\n",
       "      <td>22.85</td>\n",
       "      <td>110276.48</td>\n",
       "      <td>-0.30</td>\n",
       "      <td>-1.27</td>\n",
       "      <td>2.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-12-18</th>\n",
       "      <td>23.53</td>\n",
       "      <td>24.66</td>\n",
       "      <td>23.99</td>\n",
       "      <td>23.43</td>\n",
       "      <td>109230.05</td>\n",
       "      <td>0.65</td>\n",
       "      <td>2.79</td>\n",
       "      <td>3.74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-11-26</th>\n",
       "      <td>23.85</td>\n",
       "      <td>24.08</td>\n",
       "      <td>23.53</td>\n",
       "      <td>23.50</td>\n",
       "      <td>51446.29</td>\n",
       "      <td>-0.31</td>\n",
       "      <td>-1.30</td>\n",
       "      <td>1.76</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low     volume  price_change  p_change  \\\n",
       "2018-02-27  23.53  25.88  24.16  23.53   95578.03          0.63      2.68   \n",
       "2018-01-31  23.85  23.98  23.72  23.31   49155.02         -0.11     -0.46   \n",
       "2017-07-26  23.53  23.92  23.40  22.85  110276.48         -0.30     -1.27   \n",
       "2015-12-18  23.53  24.66  23.99  23.43  109230.05          0.65      2.79   \n",
       "2015-11-26  23.85  24.08  23.53  23.50   51446.29         -0.31     -1.30   \n",
       "\n",
       "            turnover  \n",
       "2018-02-27      2.39  \n",
       "2018-01-31      1.23  \n",
       "2017-07-26      2.76  \n",
       "2015-12-18      3.74  \n",
       "2015-11-26      1.76  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 可以指定值进行一个判断，从而进行筛选操作\n",
    "data[data[\"open\"].isin([23.53, 23.85])]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e72c564268b140c",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 3 统计运算\n",
    "## 3.1 describe\n",
    "综合分析: 能够直接得出很多统计结果,count, mean, std, min, max 等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d4e30d0b61834c9c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:18:19.727578800Z",
     "start_time": "2024-02-22T07:18:19.711018Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "      <td>643.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>21.272706</td>\n",
       "      <td>21.900513</td>\n",
       "      <td>21.336267</td>\n",
       "      <td>20.771835</td>\n",
       "      <td>99905.519114</td>\n",
       "      <td>0.018802</td>\n",
       "      <td>0.190280</td>\n",
       "      <td>2.936190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.930973</td>\n",
       "      <td>4.077578</td>\n",
       "      <td>3.942806</td>\n",
       "      <td>3.791968</td>\n",
       "      <td>73879.119354</td>\n",
       "      <td>0.898476</td>\n",
       "      <td>4.079698</td>\n",
       "      <td>2.079375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>12.250000</td>\n",
       "      <td>12.670000</td>\n",
       "      <td>12.360000</td>\n",
       "      <td>12.200000</td>\n",
       "      <td>1158.120000</td>\n",
       "      <td>-3.520000</td>\n",
       "      <td>-10.030000</td>\n",
       "      <td>0.040000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>19.000000</td>\n",
       "      <td>19.500000</td>\n",
       "      <td>19.045000</td>\n",
       "      <td>18.525000</td>\n",
       "      <td>48533.210000</td>\n",
       "      <td>-0.390000</td>\n",
       "      <td>-1.850000</td>\n",
       "      <td>1.360000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>21.440000</td>\n",
       "      <td>21.970000</td>\n",
       "      <td>21.450000</td>\n",
       "      <td>20.980000</td>\n",
       "      <td>83175.930000</td>\n",
       "      <td>0.050000</td>\n",
       "      <td>0.260000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>23.400000</td>\n",
       "      <td>24.065000</td>\n",
       "      <td>23.415000</td>\n",
       "      <td>22.850000</td>\n",
       "      <td>127580.055000</td>\n",
       "      <td>0.455000</td>\n",
       "      <td>2.305000</td>\n",
       "      <td>3.915000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>34.990000</td>\n",
       "      <td>36.350000</td>\n",
       "      <td>35.210000</td>\n",
       "      <td>34.010000</td>\n",
       "      <td>501915.410000</td>\n",
       "      <td>3.030000</td>\n",
       "      <td>10.030000</td>\n",
       "      <td>12.560000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open        high       close         low         volume  \\\n",
       "count  643.000000  643.000000  643.000000  643.000000     643.000000   \n",
       "mean    21.272706   21.900513   21.336267   20.771835   99905.519114   \n",
       "std      3.930973    4.077578    3.942806    3.791968   73879.119354   \n",
       "min     12.250000   12.670000   12.360000   12.200000    1158.120000   \n",
       "25%     19.000000   19.500000   19.045000   18.525000   48533.210000   \n",
       "50%     21.440000   21.970000   21.450000   20.980000   83175.930000   \n",
       "75%     23.400000   24.065000   23.415000   22.850000  127580.055000   \n",
       "max     34.990000   36.350000   35.210000   34.010000  501915.410000   \n",
       "\n",
       "       price_change    p_change    turnover  \n",
       "count    643.000000  643.000000  643.000000  \n",
       "mean       0.018802    0.190280    2.936190  \n",
       "std        0.898476    4.079698    2.079375  \n",
       "min       -3.520000  -10.030000    0.040000  \n",
       "25%       -0.390000   -1.850000    1.360000  \n",
       "50%        0.050000    0.260000    2.500000  \n",
       "75%        0.455000    2.305000    3.915000  \n",
       "max        3.030000   10.030000   12.560000  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算平均值、标准差、最大值、最小值\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71721571082bfef",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 3.2 统计函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "432a5f78d7184ec7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:20:07.235385600Z",
     "start_time": "2024-02-22T07:20:07.227870Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "open                34.99\n",
       "high                36.35\n",
       "close               35.21\n",
       "low                 34.01\n",
       "volume          501915.41\n",
       "price_change         3.03\n",
       "p_change            10.03\n",
       "turnover            12.56\n",
       "dtype: float64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.max(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2be3925fe7adee83",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 3.3 累计统计函数\n",
    "| 函数      | 作用                        |\n",
    "| --------- | --------------------------- |\n",
    "| `cumsum`  | **计算前1/2/3/…/n个数的和** |\n",
    "| `cummax`  | 计算前1/2/3/…/n个数的最大值 |\n",
    "| `cummin`  | 计算前1/2/3/…/n个数的最小值 |\n",
    "| `cumprod` | 计算前1/2/3/…/n个数的积     |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f70dfac6caefd34c",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "- 排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fd2e8ee869a05231",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:22:11.330272300Z",
     "start_time": "2024-02-22T07:22:11.320332500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>close</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>price_change</th>\n",
       "      <th>p_change</th>\n",
       "      <th>turnover</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015-03-02</th>\n",
       "      <td>12.25</td>\n",
       "      <td>12.67</td>\n",
       "      <td>12.52</td>\n",
       "      <td>12.20</td>\n",
       "      <td>96291.73</td>\n",
       "      <td>0.32</td>\n",
       "      <td>2.62</td>\n",
       "      <td>3.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-03</th>\n",
       "      <td>12.52</td>\n",
       "      <td>13.06</td>\n",
       "      <td>12.70</td>\n",
       "      <td>12.52</td>\n",
       "      <td>139071.61</td>\n",
       "      <td>0.18</td>\n",
       "      <td>1.44</td>\n",
       "      <td>4.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-04</th>\n",
       "      <td>12.80</td>\n",
       "      <td>12.92</td>\n",
       "      <td>12.90</td>\n",
       "      <td>12.61</td>\n",
       "      <td>67075.44</td>\n",
       "      <td>0.20</td>\n",
       "      <td>1.57</td>\n",
       "      <td>2.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-05</th>\n",
       "      <td>12.88</td>\n",
       "      <td>13.45</td>\n",
       "      <td>13.16</td>\n",
       "      <td>12.87</td>\n",
       "      <td>93180.39</td>\n",
       "      <td>0.26</td>\n",
       "      <td>2.02</td>\n",
       "      <td>3.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03-06</th>\n",
       "      <td>13.17</td>\n",
       "      <td>14.48</td>\n",
       "      <td>14.28</td>\n",
       "      <td>13.13</td>\n",
       "      <td>179831.72</td>\n",
       "      <td>1.12</td>\n",
       "      <td>8.51</td>\n",
       "      <td>6.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-14</th>\n",
       "      <td>21.49</td>\n",
       "      <td>21.99</td>\n",
       "      <td>21.92</td>\n",
       "      <td>21.48</td>\n",
       "      <td>23331.04</td>\n",
       "      <td>0.44</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-22</th>\n",
       "      <td>22.25</td>\n",
       "      <td>22.76</td>\n",
       "      <td>22.28</td>\n",
       "      <td>22.02</td>\n",
       "      <td>36105.01</td>\n",
       "      <td>0.36</td>\n",
       "      <td>1.64</td>\n",
       "      <td>0.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-23</th>\n",
       "      <td>22.88</td>\n",
       "      <td>23.37</td>\n",
       "      <td>22.82</td>\n",
       "      <td>22.71</td>\n",
       "      <td>52914.01</td>\n",
       "      <td>0.54</td>\n",
       "      <td>2.42</td>\n",
       "      <td>1.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-26</th>\n",
       "      <td>22.80</td>\n",
       "      <td>23.78</td>\n",
       "      <td>23.53</td>\n",
       "      <td>22.80</td>\n",
       "      <td>60985.11</td>\n",
       "      <td>0.69</td>\n",
       "      <td>3.02</td>\n",
       "      <td>1.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-27</th>\n",
       "      <td>23.53</td>\n",
       "      <td>25.88</td>\n",
       "      <td>24.16</td>\n",
       "      <td>23.53</td>\n",
       "      <td>95578.03</td>\n",
       "      <td>0.63</td>\n",
       "      <td>2.68</td>\n",
       "      <td>2.39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>643 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             open   high  close    low     volume  price_change  p_change  \\\n",
       "2015-03-02  12.25  12.67  12.52  12.20   96291.73          0.32      2.62   \n",
       "2015-03-03  12.52  13.06  12.70  12.52  139071.61          0.18      1.44   \n",
       "2015-03-04  12.80  12.92  12.90  12.61   67075.44          0.20      1.57   \n",
       "2015-03-05  12.88  13.45  13.16  12.87   93180.39          0.26      2.02   \n",
       "2015-03-06  13.17  14.48  14.28  13.13  179831.72          1.12      8.51   \n",
       "...           ...    ...    ...    ...        ...           ...       ...   \n",
       "2018-02-14  21.49  21.99  21.92  21.48   23331.04          0.44      2.05   \n",
       "2018-02-22  22.25  22.76  22.28  22.02   36105.01          0.36      1.64   \n",
       "2018-02-23  22.88  23.37  22.82  22.71   52914.01          0.54      2.42   \n",
       "2018-02-26  22.80  23.78  23.53  22.80   60985.11          0.69      3.02   \n",
       "2018-02-27  23.53  25.88  24.16  23.53   95578.03          0.63      2.68   \n",
       "\n",
       "            turnover  \n",
       "2015-03-02      3.30  \n",
       "2015-03-03      4.76  \n",
       "2015-03-04      2.30  \n",
       "2015-03-05      3.19  \n",
       "2015-03-06      6.16  \n",
       "...              ...  \n",
       "2018-02-14      0.58  \n",
       "2018-02-22      0.90  \n",
       "2018-02-23      1.32  \n",
       "2018-02-26      1.53  \n",
       "2018-02-27      2.39  \n",
       "\n",
       "[643 rows x 8 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 排序之后，进行累计求和\n",
    "data = data.sort_index()\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "1e0f0ac46a7df7e3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:22:29.597326400Z",
     "start_time": "2024-02-22T07:22:29.588788800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2015-03-02      2.62\n",
       "2015-03-03      4.06\n",
       "2015-03-04      5.63\n",
       "2015-03-05      7.65\n",
       "2015-03-06     16.16\n",
       "               ...  \n",
       "2018-02-14    112.59\n",
       "2018-02-22    114.23\n",
       "2018-02-23    116.65\n",
       "2018-02-26    119.67\n",
       "2018-02-27    122.35\n",
       "Name: p_change, Length: 643, dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对p_change进行求和\n",
    "stock_rise = data['p_change']\n",
    "# plot方法集成了前面直方图、条形图、饼图、折线图\n",
    "stock_rise.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "963c647286c4e54",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:22:59.104150100Z",
     "start_time": "2024-02-22T07:22:58.593910400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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w/HJJ5+Ijktqaqrs81500UVRPy7ROscAwMmTJ3HNNdegX79+UCqVmDNnjs/nDBkWJVOmTGEffPAB27lzJ9u6dSu78MILWXFxMWtpaeG3ue2221hRURFbtmwZ27hxIxs3bhw7++yzRc9zxx13sNdff51dd911bNiwYR6vc/jwYQaA/fzzz+zkyZP8l8Vi8bl/n376KdNqtez9999nu3btYrfccgtLT09n1dXV/Db/+te/2KpVq9jhw4fZpk2b2CWXXMKKioqYzWbz+ryNjY0sNzeXzZgxg+3cuZP95z//YQaDgf3rX//ij8u4cePYP/7xD/bpp5+yc889lxmNRpaamsqOHz8e88fFZrOJnu/kyZPsscceY8nJyay5udnr8x48eJC9//77bOvWrezIkSPs66+/Zjk5OWzu3Ln8cXnkkUfYjTfeyJ5++mmm0+lYRkZGzLxffvjhB/aPf/yDffnllwwA++qrr0T3NzQ0sNLSUvbZZ5+xvXv3srKyMjZmzBg2cuRIn8/73nvvsTvvvJOtXLmSHTx4kP373/9mBoOBvfbaa/xxue6661hSUhJ75pln2KRJk1i3bt2Y0Whk33zzTciOC7dN//792ddff80OHTrENm7cyH766Sef+79mzRqmUqnYs88+y3bv3s0eeughptFo2I4dOxhjjDkcDjZu3Dh2zjnnsPXr17O9e/eymTNnepwL5DzyyCPsxRdfZHfffTdLS0vzuF94jpk0aRLLzs5mAPj/R6E6Ns3NzR7v+UGDBrEbbrjB5/4n+jkmXMelo+eYJ598kj300ENszZo17MCBA+zll19mSqWSffvtt/xxee2119jKlSvZzz//zM4//3yWn5/PlEol++CDD6J+XKJ1jmHMeV6888472YcffsiGDx/O/va3v/l8zlCJWoAiVVNTwwCwVatWMcacB1uj0bBFixbx2+zZs4cBYGVlZR6Pf/TRR31ecLZs2RLU/owZM4bNmjWL/9lut7OCggI2b948r4/Ztm0bA8AOHDjgdZs33niDZWRkMLPZzN92//33s/79+8tuzx0Xg8HAPvzww7g8LsOHD2d//vOfg3odxhi766672IQJE2TvKywsjKn3i5DcyUPO+vXrGQB29OjRoJ7/r3/9K5s8eTL/c0lJCfv73//OGHO/X6644go2fvz4kB2X3bt3M7Vazfbu3RvUvl5xxRXs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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "import matplotlib.pyplot as plt\n",
    "# plot显示图形\n",
    "stock_rise.cumsum().plot()\n",
    "# 需要调用show，才能显示出结果\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbbca77c5cbe57df",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 4 自定义运算\n",
    "- apply(func, axis=0)\n",
    "    - func:自定义函数\n",
    "    - axis=0:默认是列，axis=1为行进行运算\n",
    "- 定义一个对列，最大值-最小值的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ceaee196c48d68c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-02-22T07:25:59.518587700Z",
     "start_time": "2024-02-22T07:25:59.513075700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "open     22.74\n",
       "close    22.85\n",
       "dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[['open', 'close']].apply(lambda x: x.max() - x.min(), axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d0052f8bc900234",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "# 5 小结\n",
    "- 算术运算【知道】\n",
    "- 逻辑运算【知道】\n",
    "    - 1.逻辑运算符号\n",
    "    - 2.逻辑运算函数\n",
    "        - 对象.query()\n",
    "        - 对象.isin()\n",
    "- 统计运算【知道】\n",
    "    - 1.对象.describe()\n",
    "    - 2.统计函数\n",
    "    - 3.累积统计函数\n",
    "- 自定义运算【知道】\n",
    "    - apply(func, axis=0)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
